package cn.itsource.service.impl;

import cn.itsource.domain.sys_user;
import cn.itsource.mapper.sys_userMapper;
import cn.itsource.query.BaseQuery;
import cn.itsource.service.ISysUserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@Service    // 将业务层交给spring管理
public class ISysUserServiceImpl implements ISysUserService {


    /**
     * 注入持久层依赖
     * @return
     */
    @Autowired
    private sys_userMapper mapper;


    @Override
    public List<sys_user> getAllUser() {
        return mapper.selectAll();
    }

    @Override
    public PageInfo<sys_user> getAllUserByPage(BaseQuery query) {
        /*模板查询开始*/
        // 1. 定义一个查询的模板
        Example example = new Example(sys_user.class);
        // 2. 给模板传入查询的参数
        if (!StringUtils.isBlank(query.getKeyword())) {
            // 模糊查询用户名
            example.and().andLike("realName","%" + query.getKeyword() + "%");
            // 模糊查询账号
            example.or().andLike("userName","%" + query.getKeyword() + "%");
        }
        /*模板查询结束*/


        // 1. 调用分页插件传入分页参数
        PageHelper.startPage(query.getPage(),query.getRows());
        // 2. 执行查询操作  （如果上面使用了模板查询，那这里就不能使用查询所有的方法了,所以使用模板查询的方法）
        List<sys_user> userList = mapper.selectByExample(example);
        // 3. 使用分页插件封装查询出来的数据
        PageInfo<sys_user> pageInfo = new PageInfo<>(userList);
        // 4. 返回分页数据
        return pageInfo;
    }

    @Override
    public void deleteUserById(Long id) {
        mapper.deleteByPrimaryKey(id);
    }

    @Override
    public void saveOrUpdate(sys_user user) {
        if (user.getId() == null) {
            // 如果id为空，就是新增
            mapper.insertSelective(user);
        } else {
            // 如果id不为空，就是修改
            mapper.updateByPrimaryKeySelective(user);
        }
    }

    @Override
    public void batchDelete(BaseQuery query) {
        mapper.PDelete(query.getIds());
    }

}